package com.zs.games.utils;

import java.lang.reflect.Field;

/**
 *
 * 两个实体类对比属性是否一致
 * @Author: Gjm
 */
public class EntityComparatorUtil {
    /**
     *
     * 如果两个属性数量不一致，则entity1 应该是属性值少的
     * @param column 不需要对比的列
     * @Author: Gjm
     */
    public static  <T,Y> boolean compareEntities(T entity1, Y entity2,String... column) throws Exception {
        if (entity1 == null || entity2 == null) {
            return false;
        }
        if (!entity1.getClass().equals(entity2.getClass())) {
            return false;
        }
        // 获取实体类的所有属性
        Field[] fields = entity1.getClass().getDeclaredFields();
        for (Field field : fields) {
            int i = 0;
            // 过滤掉不需要对比的列
            for (String s : column) {
                if (field.getName().equals(s)){
                   i = 1;
                   break;
                }
            }
            if (i == 1) {
                continue;
            }
            // 设置可访问私有属性
            field.setAccessible(true);
            // 获取属性值进行比较
            Object fieldValue1 = field.get(entity1);
            Object fieldValue2 = field.get(entity2);
            if (fieldValue1 == null && fieldValue2 == null) {
                continue;
            }
            if (fieldValue1 == null || !fieldValue1.equals(fieldValue2)) {
                return false;
            }

        }
        
        return true;
    }
}

